/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.uniminuto.arqSw.ejercicio.DAO;

import co.edu.uniminuto.arqSw.ejercicio.Hibernate.Cliente;
import co.edu.uniminuto.arqSw.ejercicio.Hibernate.HibernateUtil;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author JULIAN
 */
public class RegistroDAO {
    
    Session session = null;
    
        public RegistroDAO() {
        this.session = HibernateUtil.getSessionFactory().openSession();
                             }

public boolean registrar(Cliente cl) {
        boolean resultado = false;
        
        if(validaId(cl)==resultado){                                
	 try {
		 Transaction tx = session.getTransaction();
		 tx.begin();
		 session.save(cl);		
		 tx.commit();
	 } catch (Exception e) {
		e.printStackTrace(); 
		 } 
          }
        else {
    resultado=true;      
        }
    session.close();
    return resultado;

    }
    
    public boolean validaId(Cliente cl){
    
    boolean resultado=false;
    
    try{
    Transaction tx = session.getTransaction();
    tx.begin();
    Query q = session.createQuery("from Cliente where id_cliente=:c");
    q.setParameter("c", cl.getIdCliente());
    Cliente cli =(Cliente) q.uniqueResult();
    tx.commit();
    
   if(cli!=null) {
            resultado = true;
        }
   
    }
    catch(Exception e){ 
    e.printStackTrace();
    }
    return resultado;
    }

    public boolean validaReferido(Cliente cl) {
        boolean resultado = true;      
    try{
    Transaction tx = session.getTransaction();
    tx.begin();
    Query q = session.createQuery("from Cliente where id_cliente=:c");
    q.setParameter("c", cl.getReferido());
    Cliente cli =(Cliente) q.uniqueResult();
    tx.commit();
    
   if(cli!=null) {
   resultado = false;
   daPuntos(cli);
        }
   
    }
    catch(Exception e){ 
    e.printStackTrace();
    }
        
        return resultado;
    }

   public void daPuntos(Cliente cli) {
       
       try {
            Transaction tx = session.getTransaction();
            tx.begin();           
            Cliente cl =(Cliente)session.get(Cliente.class,cli.getIdCliente());
            int puntos;
            
            if(cl.getPuntos()!=null){
            puntos=cli.getPuntos();
            puntos+=1;}
            else{
            puntos=1;
               }
            cl.setPuntos(puntos);  
		 session.update(cl);		
		 tx.commit();
                 
           } catch (Exception e) {
		e.printStackTrace(); 
		 } 
    }
                         }
